/**
 * 该文件为路由接口（添加、删除、修改用户上传的图片等接口）
 */
const express=require("express");
const router=express.Router();
const path=require("path");
const fs=require("fs");

//引入passport模块
const passport = require("passport");

//引入数据库ImageModel
const ImageModel=require("../../models/Images.js");

//引入全局输出类
const JsonResult=require("../global/JsonResult.js");

//引入图片上传模块路径
const upload=require("../../middleware/upload.js");
const multer=require("multer");

//引入查询条件和相关配置项
const ImageParams=require("../conditions/imageParams.js");

// 设置静态资源服务器文件路径
// const filePath="http://localhost:5000/uploads/";

// 添加用户图片路径(/api/images/add)
router.post("/add", passport.authenticate("jwt", { session: false }),(req,res,next)=>{
    upload.single("image")(req,res,(err)=>{
        if(err instanceof multer.MulterError){
            // console.log(err);
            if(err.message == "Too many files"){
                res.json(JsonResult.middlewareFail("只能上传一张图片",null));
            }else{
                res.json(JsonResult.middlewareFail("图片大小不得超过2000k",null));
            };
        }else if(err){
            // console.log(err);
            res.json(JsonResult.middlewareFail(err.message,null));
        }else{
            const images=new ImageModel({
                name:req.body.name,
                image:req.file.filename,
                email:req.body.email
            });
            images.save().then((doc)=>{
                // console.log("添加的用户图片信息",doc);
                res.json(JsonResult.success("添加图片信息成功",{
                    insertImageFileName:req.file.filename
                }));
            }).catch((error)=>{
                // console.log(error);
                res.status(500).json(JsonResult.databaseError("数据库添加信息出错",null));
            });
        };
    });
});

// 编辑用户图片接口（/api/images/edit/:id）
router.post("/edit/:id",passport.authenticate("jwt",{session:false}),(req,res,next)=>{
    upload.single("image")(req,res,(err)=>{
        // console.log(req.body,req.params,req.file);
        if(req.file){ //表示编辑时修改了图片
            if(err instanceof multer.MulterError){
                // console.log(err);
                res.json(JsonResult.middlewareFail("图片大小不得超过200k",null));
            }else if(err){
                // console.log(err);
                res.json(JsonResult.middlewareFail(err.message,null));
            }else{
                ImageModel.findByIdAndUpdate({
                    _id:req.params.id
                },{
                    $set:{
                        email:req.body.email,
                        name:req.body.name,
                        image:req.file.filename,
                        updateTime:Date.now()
                    }
                },{
                    new:false //是否返回修改后的文档，默认false
                }).then((doc)=>{
                    // console.log("修改前的数据",doc);
                    fs.unlink(path.resolve(__dirname,"../../public/uploads/",doc.image),(err,buffer)=>{
                        if(!err){
                            console.log("文件删除成功");
                        };
                    });
                    res.json(JsonResult.success("修改成功",{
                        updateImageFileName:req.file.filename
                    }));
                }).catch((error)=>{
                    // console.log(error);
                    res.status(500).json(JsonResult.databaseError("数据库修改出错",null));
                });
            };
        }else{ //表示编辑时未修改图片
            ImageModel.findByIdAndUpdate({
                _id:req.params.id
            },{
                $set:{
                    email:req.body.email,
                    name:req.body.name,
                    updateTime:Date.now()
                }
            },{
                new:true //是否返回修改后的文档，默认false
            }).then((doc)=>{
                // console.log("修改后的数据",doc);
                res.json(JsonResult.success("修改成功",null));
            }).catch((error)=>{
                // console.log(error);
                res.status(500).json(JsonResult.databaseError("数据库修改出错",null));
            });
        };
    });
});

// 删除用户图片信息接口(/api/images/delete/:id)
router.delete("/delete/:id",passport.authenticate("jwt",{session:false}),(req,res,next)=>{
    ImageModel.findByIdAndRemove({
        _id:req.params.id
    }).then((doc)=>{
        // console.log(doc);
        fs.unlink(path.resolve(__dirname,"../../public/uploads/",doc.image),(err,buffer)=>{
            if(!err){
                console.log("文件删除成功");
            };
        });
        res.json(JsonResult.success("删除成功",null));
    }).catch((err)=>{
        // console.log(err);
        res.status(500).json(JsonResult.databaseError("数据库删除出错",null));
    });
});

// 查询所有用户图片信息接口(/api/images)
router.get("/",passport.authenticate("jwt", { session: false }),async (req,res,next)=>{
    let counts=ImageParams.counts;
    let imageOptionsObj=ImageParams.imageOptionsObj(req.query);
    let imageDataObj=ImageParams.imageDataObj(req.query);
    //先查询该集合的总数量
    await ImageModel.count().then((count)=>{
        // console.log(count);
        counts=count;
    }).catch((err)=>{
        // console.log(err);
        res.status(500).json(JsonResult.databaseError("数据库操作出错",null));
    });
    //获取集合中的数据
    ImageModel.find(imageDataObj,null,imageOptionsObj).then((doc)=>{
        let data=doc.map((item)=>{
            // item.image="http://localhost:5000/uploads/"+item.image;
            // item.image=[{
            //     url:filePath+item.image
            // }];
            return {
                id:item._id,
                date:item.date,
                email:item.email,
                name:item.name,
                image:[
                    {
                        fileName:item.image
                    }
                ]
            };
        });
        res.json(JsonResult.success("查询成功",{
            currentPage:req.query.pageNum?req.query.pageNum:1,
            currentSize:req.query.pageSize?req.query.pageSize:5,
            total:counts,
            data
        }));
    }).catch((err) => {
        console.log(err);
        res.status(500).json(JsonResult.databaseError("查询所有信息出错",null));
    });
});

module.exports=router;